package com.sikaryofficial.file.utils;

import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Position;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Objects;

/**
 * 压缩图片处理的公用方法
 * 理解成注释也行
 * <p>
 * <p>
 * linux批处理指令  //find /thumbnail/ -regex '.*\(jpg\|JPG\|png\|PNG\|jpeg\)' -size +49k -exec convert -resize "x300>" -quality 75 {} {} \;
 *
 * @Author pzy
 * @Description: TODO
 * @Version 0.1.0
 */
public class CompressionMethod {

    //代码
    //<dependency>
    //    <groupId>net.coobird</groupId>
    //    <artifactId>thumbnailator</artifactId>
    //    <version>0.4.8</version>
    //</dependency>


    /**
     * @param scale    缩放比例 ：大于1是放大，小于1是缩小
     * @param fromFile 源图片路径
     * @param tofile   目的图片路径
     * @throws IOException <br>
     * @Title: scale<br>
     * @Description: 按比例缩放<br>
     */
    public static void scale(double scale, String fromFile, String tofile) throws IOException {
        Thumbnails.of(fromFile).scale(0.5).toFile(tofile);
    }

    /**
     * @param height   图片高 px
     * @param width    图片宽 px
     * @param fromFile
     * @param tofile
     * @throws IOException <br>
     * @Title: size<br>
     * @Description: 按大小尺寸缩放<br>
     */
    public static void size(int height, int width, String fromFile, String tofile) throws IOException {
        Thumbnails.of(fromFile).size(width, height).toFile(tofile);
    }


    /**
     * @param height   图片缩小高度至 px
     * @param fromFile
     * @param tofile
     * @throws IOException <br>
     * @Title: height<br>
     * @Description: 按指定高度缩小图片，等比例调整图片宽度<br>
     */
    public static void height(int height, String fromFile, String tofile) throws IOException {
        Thumbnails.of(fromFile).height(height).toFile(tofile);
    }


    /**
     * @param width    图片缩小宽度至 px
     * @param fromFile
     * @param tofile
     * @throws IOException <br>
     * @Title: width<br>
     * @Description: 按指定宽度缩小图片，等比例调整图片高度<br>
     */
    public static void width(int width, String fromFile, String tofile) throws IOException {
        Thumbnails.of(fromFile).width(width).toFile(tofile);
    }

    /**
     * @param quality  图片质量比例，1 为高质量，越接近0图片质量越低
     * @param fromFile
     * @param tofile
     * @throws IOException <br>
     * @Title: outputQuality<br>
     * @Description: 设置图片质量，一般与缩放功能同时使用<br>
     */
    public static void outputQuality(float quality, String fromFile, String tofile) throws IOException {
        Thumbnails.of(fromFile).outputQuality(quality).toFile(tofile);
    }

    /**
     * @param position 位置
     * @param image    图片
     * @param opacity  透明度
     * @param fromFile
     * @param tofile
     * @throws IOException <br>
     * @Title: watermark<br>
     * @Description: 添加图片水印<br>
     */
    public static void watermark(Position position, BufferedImage image, float opacity, String fromFile, String tofile) throws IOException {
        Thumbnails.of(fromFile).watermark(position, image, opacity).toFile(tofile);
    }

    /**
     * @param angle    正数则为顺时针，负数则为逆时针
     * @param fromFile
     * @param tofile
     * @throws IOException <br>
     * @Title: rotate<br>
     * @Description: 图片旋转 <br>
     */
    public static void rotate(double angle, String fromFile, String tofile) throws IOException {
        Thumbnails.of(fromFile).rotate(angle).toFile(tofile);
    }

    /**
     * @param position 图片位置
     * @param width    裁剪宽
     * @param height   裁剪高
     * @param fromFile
     * @param tofile
     * @throws IOException <br>
     * @Title: sourceRegion<br>
     * @Description: 裁剪图片<br>
     */
    public static void sourceRegion(Position position, int width, int height, String fromFile, String tofile) throws IOException {
//		Thumbnails.of(fromFile).sourceRegion(Positions.TOP_CENTER, width, height).toFile(tofile);
        Thumbnails.of(fromFile).sourceRegion(position, width, height).toFile(tofile);
    }

    /**
     * @param fromDir
     * @param tofile
     * @throws IOException <br>
     * @Title: listfiles<br>
     * @Description: 批量处理文件，可与前几个方法结合起来处理<br>
     */
    public static void listfiles(String fromDir, String tofile) throws IOException {
        Thumbnails.of(Objects.requireNonNull(new File(fromDir).listFiles())).toFile(tofile);
    }


}